registerServiceWorker.js ➔ register   B
last analyzed

Complexity

Conditions 4
Paths 3

Size

Total Lines 24

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 4
c 1
b 0
f 0
nc 3
dl 0
loc 24
rs 8.6845
nop 0

1 Function

Rating   Name   Duplication   Size   Complexity  
A registerServiceWorker.js ➔ ... ➔ ??? 0 11 2
1
// In production, we register a service worker to serve assets from local cache.
2
3
// This lets the app load faster on subsequent visits in production, and gives
4
// it offline capabilities. However, it also means that developers (and users)
5
// will only see deployed updates on the "N+1" visit to a page, since previously
6
// cached resources are updated in the background.
7
8
// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.
9
// This link also includes instructions on opting out of this behavior.
10
11
const isLocalhost = Boolean(
12
  window.location.hostname === 'localhost' ||
13
    // [::1] is the IPv6 localhost address.
14
    window.location.hostname === '[::1]' ||
15
    // 127.0.0.1/8 is considered localhost for IPv4.
16
    window.location.hostname.match(
17
      /^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/
18
    )
19
);
20
21
export default function register() {
22
  if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {
0 ignored issues
show
Bug introduced by
The variable navigator seems to be never declared. If this is a global, consider adding a /** global: navigator */ comment.

This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.

To learn more about declaring variables in Javascript, see the MDN.

Loading history...
23
    // The URL constructor is available in all browsers that support SW.
24
    const publicUrl = new URL(process.env.PUBLIC_URL, window.location);
0 ignored issues
show
Bug introduced by
The variable URL seems to be never declared. If this is a global, consider adding a /** global: URL */ comment.

This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.

To learn more about declaring variables in Javascript, see the MDN.

Loading history...
25
    if (publicUrl.origin !== window.location.origin) {
26
      // Our service worker won't work if PUBLIC_URL is on a different origin
27
      // from what our page is served on. This might happen if a CDN is used to
28
      // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374
29
      return;
30
    }
31
32
    window.addEventListener('load', () => {
33
      const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;
34
35
      if (!isLocalhost) {
36
        // Is not local host. Just register service worker
37
        registerValidSW(swUrl);
38
      } else {
39
        // This is running on localhost. Lets check if a service worker still exists or not.
40
        checkValidServiceWorker(swUrl);
41
      }
42
    });
43
  }
44
}
45
46
function registerValidSW(swUrl) {
47
  navigator.serviceWorker
0 ignored issues
show
Bug introduced by
The variable navigator seems to be never declared. If this is a global, consider adding a /** global: navigator */ comment.

This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.

To learn more about declaring variables in Javascript, see the MDN.

Loading history...
48
    .register(swUrl)
49
    .then(registration => {
50
      registration.onupdatefound = () => {
51
        const installingWorker = registration.installing;
52
        installingWorker.onstatechange = () => {
53
          if (installingWorker.state === 'installed') {
54
            if (navigator.serviceWorker.controller) {
0 ignored issues
show
Bug introduced by
The variable navigator seems to be never declared. If this is a global, consider adding a /** global: navigator */ comment.

This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.

To learn more about declaring variables in Javascript, see the MDN.

Loading history...
55
              // At this point, the old content will have been purged and
56
              // the fresh content will have been added to the cache.
57
              // It's the perfect time to display a "New content is
58
              // available; please refresh." message in your web app.
59
              console.log('New content is available; please refresh.');
0 ignored issues
show
Debugging Code introduced by
console.log looks like debug code. Are you sure you do not want to remove it?
Loading history...
60
            } else {
61
              // At this point, everything has been precached.
62
              // It's the perfect time to display a
63
              // "Content is cached for offline use." message.
64
              console.log('Content is cached for offline use.');
65
            }
66
          }
67
        };
68
      };
69
    })
70
    .catch(error => {
71
      console.error('Error during service worker registration:', error);
72
    });
73
}
74
75
function checkValidServiceWorker(swUrl) {
76
  // Check if the service worker can be found. If it can't reload the page.
77
  fetch(swUrl)
78
    .then(response => {
79
      // Ensure service worker exists, and that we really are getting a JS file.
80
      if (
81
        response.status === 404 ||
82
        response.headers.get('content-type').indexOf('javascript') === -1
83
      ) {
84
        // No service worker found. Probably a different app. Reload the page.
85
        navigator.serviceWorker.ready.then(registration => {
0 ignored issues
show
Bug introduced by
The variable navigator seems to be never declared. If this is a global, consider adding a /** global: navigator */ comment.

This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.

To learn more about declaring variables in Javascript, see the MDN.

Loading history...
86
          registration.unregister().then(() => {
87
            window.location.reload();
88
          });
89
        });
90
      } else {
91
        // Service worker found. Proceed as normal.
92
        registerValidSW(swUrl);
93
      }
94
    })
95
    .catch(() => {
96
      console.log(
0 ignored issues
show
Debugging Code introduced by
console.log looks like debug code. Are you sure you do not want to remove it?
Loading history...
97
        'No internet connection found. App is running in offline mode.'
98
      );
99
    });
100
}
101
102
export function unregister() {
103
  if ('serviceWorker' in navigator) {
0 ignored issues
show
Bug introduced by
The variable navigator seems to be never declared. If this is a global, consider adding a /** global: navigator */ comment.

This checks looks for references to variables that have not been declared. This is most likey a typographical error or a variable has been renamed.

To learn more about declaring variables in Javascript, see the MDN.

Loading history...
104
    navigator.serviceWorker.ready.then(registration => {
105
      registration.unregister();
106
    });
107
  }
108
}
109